#!/bin/sh
# SPDX-License-Identifier: GPL-2.0

#
# Script created by: Stephen R. van den Berg <srb@cuci.nl>, 1999/04/18
# Donated to the public domain.
#
# This script transforms the output of "ip" into more readable text.
# "ip" is the Linux-advanced-routing configuration tool part of the
# iproute package.
#

test "X-h" = "X$1" && echo "Usage: $0 [tablenr [raw ip args...]]" && exit 64

test -z "$*" && set 0

ip route list table "$@" |
 while read network rest
 do set xx $rest
    shift
    proto=""
    via=""
    dev=""
    scope=""
    src=""
    table=""
    case $network in
       broadcast|local|unreachable) via=$network
          network=$1
          shift
          ;;
    esac
    while test $# != 0
    do
       case "$1" in
          proto|via|dev|scope|src|table)
             key=$1
             val=$2
             eval "$key='$val'"
             shift 2
             ;;
          dead|onlink|pervasive|offload|notify|linkdown|unresolved)
             shift
             ;;
          *)
             # avoid infinite loop on unknown keyword without value at line end
             shift
             shift
             ;;
       esac
    done
    echo "$network	$via	$src	$proto	$scope	$dev	$table"
 done | awk -F '	' '
BEGIN {
   format="%15s%-3s %15s %15s %8s %8s%7s %s\n";
   printf(format,"target","","gateway","source","proto","scope","dev","tbl");
 }
 { network=$1;
   mask="";
   if(match(network,"/"))
    { mask=" "substr(network,RSTART+1);
      network=substr(network,0,RSTART);
    }
   via=$2;
   src=$3;
   proto=$4;
   scope=$5;
   dev=$6;
   table=$7;
   printf(format,network,mask,via,src,proto,scope,dev,table);
 }
'
